import { NextRequest, NextResponse } from 'next/server'; import { prisma } from '@/lib/prisma'; export async function GET( request: NextRequest, { params }: { params: Promise<{ id: string }> } ) { try { const { id } = await params; const importId = parseInt(id); if (isNaN(importId)) { return NextResponse.json( { error: 'Invalid import ID' }, { status: 400 } ); } // Check if import exists const importRecord = await prisma.import.findUnique({ where: { id: importId } }); if (!importRecord) { return NextResponse.json( { error: 'Import not found' }, { status: 404 } ); } // Get basic summary data const totalRecords = await prisma.cintasInstallCalendar.count({ where: { importId } }); const cintasSummaries = await prisma.cintasSummary.findMany({ where: { importId }, orderBy: { week: 'asc' } }); // Get file info const file = importRecord.fileId ? await prisma.file.findUnique({ where: { id: importRecord.fileId } }) : null; const summary = { totalRecords, totalWeeks: cintasSummaries.length, cintasSummaries: cintasSummaries.map(summary => ({ week: summary.week, trrTotal: summary.trrTotal, fourWkAverages: summary.fourWkAverages, trrPlus4Wk: summary.trrPlus4Wk, powerAdds: summary.powerAdds })) }; return NextResponse.json({ importId, fileName: file?.filename || 'Unknown', uploadDate: importRecord.createdAt, summary, summaryExists: cintasSummaries.length > 0 }); } catch (error) { console.error('Error fetching import summary:', error); return NextResponse.json( { error: 'Failed to fetch import summary' }, { status: 500 } ); } } export async function POST( request: NextRequest, { params }: { params: Promise<{ id: string }> } ) { try { const { id } = await params; const importId = parseInt(id); if (isNaN(importId)) { return NextResponse.json( { error: 'Invalid import ID' }, { status: 400 } ); } // Check if import exists const importRecord = await prisma.import.findUnique({ where: { id: importId } }); if (!importRecord) { return NextResponse.json( { error: 'Import not found' }, { status: 404 } ); } // Check if summary already exists const existingSummaries = await prisma.cintasSummary.count({ where: { importId } }); if (existingSummaries > 0) { // Return existing summary const cintasSummaries = await prisma.cintasSummary.findMany({ where: { importId }, orderBy: { weekId: 'desc' } }); return NextResponse.json({ importId, summaryGenerated: false, message: 'Summary already exists', summary: cintasSummaries.map(summary => ({ week: summary.week, trrTotal: summary.trrTotal, fourWkAverages: summary.fourWkAverages, trrPlus4Wk: summary.trrPlus4Wk, powerAdds: summary.powerAdds })) }); } // Execute the stored procedure to generate summary await prisma.$executeRawUnsafe( `CALL cintas_calculate_summary(${importId})` ); // Fetch the newly generated summary const cintasSummaries = await prisma.cintasSummary.findMany({ where: { importId }, orderBy: { weekId: 'desc' } }); return NextResponse.json({ importId, summaryGenerated: true, message: 'Summary generated successfully', summary: cintasSummaries.map(summary => ({ week: summary.week, trrTotal: summary.trrTotal, fourWkAverages: summary.fourWkAverages, trrPlus4Wk: summary.trrPlus4Wk, powerAdds: summary.powerAdds })) }); } catch (error) { console.error('Error generating summary:', error); return NextResponse.json( { error: 'Failed to generate summary', details: error instanceof Error ? error.message : 'Unknown error' }, { status: 500 } ); } }